package com.ukadas.eduko.persistencia;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.ukadas.eduko.modelo.Perfil;
import com.ukadas.eduko.modelo.Usuario;


@Repository
public class UsuarioDaoSpringHibernate4Implementation implements UsuarioDao {

	@Autowired
	private SessionFactory sessionFactory;
	
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public void insertar(Usuario usuario) {
		sessionFactory.getCurrentSession().save(usuario);
	}

	public void modificar(Usuario usuario){
		sessionFactory.getCurrentSession().update(usuario);
	}

	public void borrar(Usuario usuario) {
		usuario.setActivada(false);
		sessionFactory.getCurrentSession().update(usuario);
	}

	public Usuario buscar(int idUsuario){
		return (Usuario) sessionFactory.getCurrentSession().get(Usuario.class, idUsuario);
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> listarTodos() {
		Query q = sessionFactory.getCurrentSession().
				createQuery("from Usuario u");
		//q.setParameter("efface", "0");
		return q.list();
	}

	@Override
	public Usuario buscarPorUsuario(String usuario) {
		Query q = sessionFactory.getCurrentSession().
				createQuery("from Usuario u where u.usuario=:usuario");
		q.setParameter("usuario", usuario);
		List<Usuario> rs = q.list();
		if(rs.size()==1)
			return rs.get(0);
		else
			return null;
	}

	public List<Usuario> listarPorPerfil(Perfil perfil) {
		Query q = sessionFactory.getCurrentSession().
				createQuery("from Usuario u where u.perfil.idPerfil=:idPerfil");
		q.setParameter("idPerfil", perfil.getIdPerfil());
		return q.list();
	}
	
	public List<Perfil> listaPerfiles(){
		Query q = sessionFactory.getCurrentSession().
				createQuery("from Perfil");
		return q.list();
	}

	
}
